在我們昨天的文章 [第 17 天] 資料角力有提到,進行資料角力(Data wrangling)的目的多半是為了後續的資料視覺化或者建立機器學習的模型。R 語言使用者的資料視覺化工具有靜態的 Base plotting system(R 語言內建的繪圖功能)跟 ggplot2 套件,與動態的 plotly 套件。而 Python 的視覺化套件有靜態的 matplotlib 跟 seaborn 套件,與動態的 bokeh 套件。
我們今天試著使用看看 matplotlib 並且也使用 R 語言的 Base plotting system 來畫一些基本的圖形,包括:
我們的開發環境是 Jupyter Notebook,這個指令可以讓圖形不會在新視窗呈現。
%matplotlib inline
使用 matplotlib.pyplot
的 hist()
方法。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
normal_samples = np.random.normal(size = 100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
uniform_samples = np.random.uniform(size = 100000) # 生成 100000 組介於 0 與 1 之間均勻分配隨機變數
plt.hist(normal_samples)
plt.show()
plt.hist(uniform_samples)
plt.show()
如果你對於 numpy
套件的 random()
方法覺得陌生,我推薦你參考 [第 13 天] 常用屬性或方法(2)ndarray。
使用 hist()
函數。
normal_samples <- runif(100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
uniform_samples <- rnorm(100000) # 生成 100000 組介於 0 與 1 之間均勻分配隨機變數
hist(normal_samples)
hist(uniform_samples)
使用 matplotlib.pyplot
的 scatter()
方法。
%matplotlib inline
import matplotlib.pyplot as plt
speed = [4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 22, 23, 24, 24, 24, 24, 25]
dist = [2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, 20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, 48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85]
plt.scatter(speed, dist)
plt.show()
使用 plot()
函數。
plot(cars$speed, cars$dist)
使用 matplotlib.pyplot
的 plot()
方法。
%matplotlib inline
import matplotlib.pyplot as plt
speed = [4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 20, 20, 20, 20, 20, 22, 23, 24, 24, 24, 24, 25]
dist = [2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34, 34, 46, 26, 36, 60, 80, 20, 26, 54, 32, 40, 32, 40, 50, 42, 56, 76, 84, 36, 46, 68, 32, 48, 52, 56, 64, 66, 54, 70, 92, 93, 120, 85]
plt.plot(speed, dist)
plt.show()
使用 plot()
函數,指定參數 type = "l"
。
plot(cars$speed, cars$dist, type = "l")
使用 matplotlib.pyplot
的 bar()
方法。
%matplotlib inline
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
cyl = [6 ,6 ,4 ,6 ,8 ,6 ,8 ,4 ,4 ,6 ,6 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,4 ,4 ,8 ,8 ,8 ,8 ,4 ,4 ,4 ,8 ,6 ,8 ,4]
labels, values = zip(*Counter(cyl).items())
width = 1
plt.bar(indexes, values)
plt.xticks(indexes + width * 0.5, labels)
plt.show()
使用 barplot()
函數。
barplot(table(mtcars$cyl))
使用 matplotlib.pyplot
的 boxplot()
方法。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
normal_samples = np.random.normal(size = 100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
plt.boxplot(normal_samples)
plt.show()
使用 boxplot()
函數。
normal_samples <- runif(100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
boxplot(normal_samples)
使用圖形物件的 savefig()
方法。
import numpy as np
import matplotlib.pyplot as plt
normal_samples = np.random.normal(size = 100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
plt.hist(normal_samples)
plt.savefig(filename = "my_hist.png", format = "png")
先使用 png()
函數建立一個空的 .png
圖檔,繪圖後再輸入 dev.off()
。
normal_samples <- runif(100000) # 生成 100000 組標準常態分配(平均值為 0,標準差為 1 的常態分配)隨機變數
png("my_hist.png")
hist(normal_samples)
dev.off()
第十八天我們練習使用 Python 的視覺化套件 matplotlib 繪製基本的圖形,並且與 R 語言的 Base plotting system 相互對照。
同步刊登於 Github:https://github.com/yaojenkuo/learn_python_for_a_r_user
Python 長條圖(Bar plot)那段無法執行。NameError: name 'indexes' is not defined
%matplotlib inline
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
cyl = [6 ,6 ,4 ,6 ,8 ,6 ,8 ,4 ,4 ,6 ,6 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,4 ,4 ,8 ,8 ,8 ,8 ,4 ,4 ,4 ,8 ,6 ,8 ,4]
labels, values = zip(*Counter(cyl).items())
indexes = np.arange(len(values))
plt.bar(indexes, values, width = 0.5)
plt.xticks(indexes, labels)
plt.show()
另外python輸出圖形
savefig()
#filename改成fname就能執行了
import numpy as np
import matplotlib.pyplot as plt
normal_samples=np.random.normal(size=100000)
plt.hist(normal_samples)
plt.savefig(fname="my_hist.png",format="png")